namespace Radar
{
    using System;

    public interface IContainer
    {
        IIocConfiguration Register<TService, TImplementation>() where TImplementation : TService;
        IIocConfiguration Register<TService, TImplementation>(string key) where TImplementation : TService;
        IIocConfiguration Register(Type serviceType, Type implementationType);
        IIocConfiguration Register(Type serviceType, Type implementationType, string key);
        IIocConfiguration Register(Type serviceType, Func<object> instanceBuilder);

        bool IsRegistered<TService>();
        bool IsRegistered(Type serviceType);
        bool IsRegistered(string key);

        object Resolve(Type serviceType);
        object Resolve(string key);
        TService Resolve<TService>();
        TService Resolve<TService>(ResolveContext context);
    }
}